在這一章中,我們將介紹 EVM 中的停止和算術指令,包括 STOP、ADD、MUL、SUB、DIV、SDIV、MOD、SMOD、ADDMOD、MULMOD、EXP 和 SIGNEXTEND。
#
# Stop and Arithmetic
#
STOP = 0x00
ADD = 0x01
MUL = 0x02
SUB = 0x03
DIV = 0x04
SDIV = 0x05
MOD = 0x06
SMOD = 0x07
ADDMOD = 0x08
MULMOD = 0x09
EXP = 0x0A
SIGNEXTEND = 0x0B
STOP 指令用於停止程式的執行,這會使得 EVM 停止執行並返回。
def stop(self):
# 停止程式的執行
return
算術指令包括 ADD、MUL、SUB、DIV、SDIV、MOD、SMOD、ADDMOD、MULMOD、EXP 和 SIGNEXTEND。這些指令用於執行不同的算術運算。
def add(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
result = value1 + value2
self.evm.stack.append(result)
def mul(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
result = value1 * value2
self.evm.stack.append(result)
def sub(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
result = value2 - value1
self.evm.stack.append(result)
def div(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
if value1 == 0:
result = 0
else:
result = value2 // value1
self.evm.stack.append(result)
def mod(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
result = value1 % value2 if value1 != 0 else 0
self.evm.stack.append(result)
addmod 指令:mod 加法
def addmod(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
value3 = self.evm.stack.pop()
result = (value1 + value2) % value3 if value3 != 0 else 0
self.evm.stack.append(result)
mulmod 指令:mod 乘法
def addmod(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
value3 = self.evm.stack.pop()
result = (value1 + value2) % value3 if value3 != 0 else 0
self.evm.stack.append(result)
exp 指令:乘冪數
def exp(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
result = pow(value1, value2)
self.evm.stack.append(result)
SIGNEXTEND 指令用於擴展數據的符號位。
def signextend(self):
value1 = self.evm.stack.pop()
value2 = self.evm.stack.pop()
sign_bit = 255 if value1 & 128 else 0
result = (value2 & ((1 << (8 * value1)) - 1)) | (sign_bit << (8 * value1))
self.evm.stack.append(result)
在這一章中,我們介紹了 EVM 停止和算術指令,包括 STOP、ADD、MUL、SUB、DIV、SDIV、MOD、SMOD、ADDMOD、MULMOD、EXP 和 SIGNEXTEND。這些指令執行算術運算並可以擴展數據的符號位。接下來,我們將繼續擴充你的 EVM 功能,如果有任何疑問,請隨時提問!